//
// File: norm.cpp
//
// MATLAB Coder version            : 5.4
// C/C++ source code generated on  : 02-Dec-2024 17:27:20
//

// Include Files
#include "norm.h"
#include <cmath>

// Function Definitions
//
// Arguments    : double x
//                double P
// Return Type  : double
//
namespace coder {
double b_norm(double x, double P)
{
  double y;
  if ((P > 0.0) && std::isinf(P)) {
    double absx;
    y = 0.0;
    absx = std::abs(x);
    if (absx > 0.0) {
      y = absx;
    }
  } else if (P == 0.0) {
    y = std::pow(std::pow(std::abs(x), P), 1.0 / P);
  } else if (P == 2.0) {
    y = std::abs(x);
  } else if (P == 1.0) {
    y = std::abs(x);
  } else if (P > 0.0) {
    double absx;
    y = 0.0;
    absx = std::abs(x);
    if (absx > 0.0) {
      y = absx * std::pow(1.0, 1.0 / P);
    }
  } else if (P < 0.0) {
    double absx;
    double scale;
    y = 0.0;
    scale = 1.7976931348623157E+308;
    absx = std::abs(x);
    if (absx != 0.0) {
      if (absx < 1.7976931348623157E+308) {
        y = 1.0;
        scale = absx;
      } else {
        y = std::pow(absx / 1.7976931348623157E+308, P);
      }
      if (y > 0.0) {
        y = scale * std::pow(y, 1.0 / P);
      }
    }
  } else {
    y = 0.0;
  }
  return y;
}

} // namespace coder

//
// File trailer for norm.cpp
//
// [EOF]
//
